package org.zephyr.thread;

/**
 * 两个线程，共同读写一个全局变量count,每个线程执行10000次count++,count的最终结果会是20000吗，在心中猜测一下运行结果？
 */
public class ConcurrentProblem implements Runnable{
    private static final ConcurrentProblem concurrentProblem=new ConcurrentProblem();
    private static int count;

    public static void main(String[] args) {
        Thread t1=new Thread(concurrentProblem);
        Thread t2=new Thread(concurrentProblem);
        t1.start();
        t2.start();
        try{
            t1.join();
            t2.join();
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        System.out.println(count);
    }
    /**
     * 多线程问题原因：count++这行代码要分三步执行；1：读取；2：修改；3：写入。
     * 在这三步中，任何一步都可能被其他线程打断，导致值还没来得及写入，就被其他线程读取或写入，
     * 这就是多线程并行操作统一变量导致的问题。
     */
    @Override
    public void run() {
        for(int i=0;i<10000;i++){
            count++;
        }
    }
}
